package com.pc.admin.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 *  限流注解
 *
 * @author 吕飞扬
 * @date 2023/6/22 21:22
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Limiting {
    /**
     * 时间
     */
    int time() default 60;

    /**
     * 次数
     */
    int num() default 20;

    /**
     * 频控策略，默认IP+URI
     */
    Target target() default Target.IP;

    /**
     * 时间单位
     */
    TimeUnit TIME_UNIT() default TimeUnit.SECONDS;

    /**
     * springEl 表达式，target=EL必填 #sex
     *
     */
    String spEl() default "";

    /**
     * 策略枚举  El 参数注入时-自定义参数  例如 sex='男' 或 sex='女' 对这个参数进行流量限制 #sex必填
     */
    enum Target{
        ID,IP,EL
    }

}
